Exhaustive testing of software is generally not feasible, and therefore, test efforts tend to be directed to running tests most likely to uncover errors. It is often possible to save testing time by bypassing the remainder of a test when preliminary test results indicate that the balance of the test is guaranteed to succeed. For example, suppose T is a test, and the final outcome of T entirely depends on intermediate results produced by T. Suppose also that a run of test T succeeds. Then for a subsequent run of T for which the intermediate results match the intermediate results from the earlier successful run, the part of test T that follows the part producing the intermediate results can be bypassed because that remainder of the test may be guaranteed to succeed as well.
To illustrate bypassing a portion of a test in a more concrete example, suppose S is a software system that generates electronic designs, and assume T is a test for S. Test T consists of two main steps: first, running S to generate a design, and second, simulating the generated design. Test T succeeds if the simulation produces expected results. Simulations are usually quite slow, so it is useful to eliminate simulation testing if practical. Since the simulation results depend on nothing except for the design being simulated (assuming the same simulation stimuli), the results are guaranteed to be good if the design being simulated is known to be identical to the design for which simulation succeeded previously.
Tracking tests and intermediate and final test results may be time-consuming and potentially prone to errors. That is, tests may be so numerous, large, and complex that accurate identification of suitable portions of tests for bypass may be very difficult.
The present invention may address one or more of the above issues.